// 第一题：
// 示例1：   输入: [2,2,1]输出: 1
// 输入: [4,1,2,1,2]输出: 4

// 5、使用ts正确定义函数 singleNumber
// 6、正确设置函数 singleNumber 返回值类型
// 7、使用接口正确约束函数 singleNumber 参数的类型
// 8、正确约束数组的类型
// 9. 正确实现题1的功能
// const singleNumber = function (nums: number[]): number {
//   const s = nums.find((v) => {
//     return nums.indexOf(v) === nums.lastIndexOf(v);
//   });

//   return s as number;
// };
// const result1 = singleNumber([2, 2, 1]);
// const result2 = singleNumber([4, 1, 2, 1, 2]);
// const result3 = singleNumber([4, 1, 2, 1, 2, 4, 6, 6, 3, 8, 8]);

// console.log(result2);
// console.log(result1);
// console.log(result3);

// 第二题：
// 示例 1：
// 输入：nums1 = [1,2,2,1], nums2 = [2,2]
// 输出：[2]

// 示例 2：
// 输入：nums1 = [4,9,5], nums2 = [9,4,9,8,4]
// 输出：[9,4]
// 解释：[4,9] 也是可通过的

// 函数调用：
// const intersection = function(nums1: number[], nums2: number[]): number[] {
// 	const s = nums1.filter(v => {
// 		return nums2.includes(v)
// 	})
// 	return [...new Set(s)]
// };
// const result4 = intersection([1,2,2,1], [2,2])
// const result5 = intersection([4,9,5], [9,4,9,8,4])
// console.log(result4);
// console.log(result5);

// 第三题：
// 示例 1：
// 输入：ransomNote = "a", magazine = "b"
// 输出：false
// 示例 2：
// 输入：ransomNote = "aa", magazine = "ab"
// 输出：false
// 示例 3：
// 输入：ransomNote = "aaa", magazine = "aaba"
// 输出：true

// var canConstruct = function (ransomNote: string, magazine: string): boolean {
//   const arr1 = ransomNote.split("");
//   const arr2 = magazine.split("");
//   // "aaaa", "aaba");

//   while (arr1.length > 0) {
//     const item = arr1[0];
//     const index = arr2.indexOf(item);

//     if (index > -1) {
//       arr2.splice(index, 1);
//       arr1.splice(0, 1);
//     } else {
//       return false;
//     }
//   }

//   return true;
// };

// const c1 = canConstruct("a", "b");
// const c2 = canConstruct("aa", "ab");
// const c3 = canConstruct("aaa", "aaaab");

// console.log(c1, c2, c3);
